package com.just.fun.string;


/**
 * 算法题，java-给定字符串，删除开始和结尾处的空格，并将中间的多个连续的空格合并成一个。
 */
public class StringTest2 {
    public static void main(String[] args){
         String str="   钟山风雨起苍黄，百万雄师过大江。虎踞龙盘今胜昔，天翻地覆慨而慷。    宜将胜勇追穷寇，不可沽名学霸王。天若有情天亦老，人间正道是沧桑。   ";
         System.out.println("str:"+str);
         System.out.println("str original length:"+str.length());
         //方法一，用别人家的轮子
        long start1=System.currentTimeMillis();
        String result1=str.trim().replaceAll(" +"," ");
        System.out.println("result1:"+result1);
        System.out.println("result1 length:"+result1.length());
        System.out.println("别人家的轮子时间："+(System.currentTimeMillis()-start1));
        long start2=System.currentTimeMillis();
        //方法二，自己造轮子
        String result2=deleteExtraSpace(str);
        System.out.println("result2:"+result2);
        System.out.println("result2 length:"+result2.length());
        System.out.println("自己家的轮子时间："+(System.currentTimeMillis()-start2));

    }
    private static String deleteExtraSpace(String str){
        //转成数组，开始和结束都去掉空格，中间遇到空格先保存一个，连续的都去掉
        if(str==null){
           return null;
        }
        if(str.length()==0||str.equals(" ")){
           return "";
        }
        //先转成数组
        char[] oldChar=str.toCharArray();
        //中间数组，先实现去除空格的功能，然后最后要去掉尾部空格，必须新建一个数组了。
        char[] dumpChar=new char[oldChar.length];
        //是否保存空字符串，如果多个连在一起的空字符串，可以根据这个确定是否保存
        Boolean keepSpace=false;
        int j=0;
        for(int i=0;i<oldChar.length;i++){
            if(oldChar[i]!=' '){
                dumpChar[j++]=oldChar[i];
               keepSpace=true;
            }else if(keepSpace){
                dumpChar[j++]=oldChar[i];
                keepSpace=false;
            }
        }
        char[] resultChar;
        if(dumpChar[j-1]==' '){
            j=j-1;
        }
        resultChar=new char[j];
        System.arraycopy(dumpChar, 0, resultChar, 0, resultChar.length);
        return new String(resultChar);

    }
}
